package com.fll.codeworld.annotation;

import java.lang.annotation.*;

/**
 * @author fll
 * @description
 * @date 2021/11/4 15:53
 * @Target可以简单理解为注解的使用范围
 *
 * @Target(ElementType.TYPE)  接口、类、枚举、注解
 * @Target(ElementType.FIELD)  字段、枚举的常量
 * @Target(ElementType.METHOD) 方法
 * @Target(ElementType.PARAMETER) 方法参数
 * @Target(ElementType.CONSTRUCTOR) 构造函数
 * @Target(ElementType.LOCAL_VARIABLE) 局部变量
 * @Target(ElementType.ANNOTATION_TYPE) 注解
 * @Target(ElementType.PACKAGE)  包
 *
 * @Retention  可以用来修饰注解，是注解的注解，称为元注解。
 *             Retention注解有一个属性value——RetentionPolicy，RetentionPolicy有3个值：CLASS RUNTIME SOURCE
 *             按生命周期来划分可分为3类：
 * RetentionPolicy.SOURCE：注解只保留在源文件，当Java文件编译成class文件的时候，注解被遗弃；
 * RetentionPolicy.CLASS：注解被保留到class文件，但jvm加载class文件时候被遗弃，这是默认的生命周期；
 * RetentionPolicy.RUNTIME：注解不仅被保存到class文件中，jvm加载class文件之后，仍然存在；
 * 这3个生命周期分别对应于：Java源文件(.java文件) —> .class文件 —> 内存中的字节码。
 * @Documented注解
 * Documented注解表明这个注解是由 javadoc记录的，在默认情况下也有类似的记录工具。 如果一个类型声明被注解了文档化，它的注解成为公共API的一部分
 */
@Target({ElementType.METHOD,ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface WrapResp {
}
